// 当 Promise 变成接受状态（fulfilled）时调用的函数。该函数有一个参数，即接受的最终结果（the fulfillment value）。
// 如果该参数不是函数，则会在内部被替换为（x） => x, 即原样返回promise最终结果的函数
// Promise.resolve(1).then(2).then(Promise.resolve(3)).then(console.log);

// 微任务中添加微任务会在本次事件循环中立即执行，但是在宏任务中添加宏任务只能在下一次事件循环中执行
/* console.log("global begin");
setTimeout(function timer() {
  queueMicrotask(() => {
    console.log("queueMicrotask");
  });
  console.log("timer invoke");
}, 1000);
console.log("global end"); */

let messageQueue = [];
let sendMessage = (message) => {
  messageQueue.push(message);
  if (messageQueue.length === 1) {
    queueMicrotask(() => {
      const json = JSON.stringify(messageQueue);
      messageQueue.length = 0;
      console.log(json);
    });
  }
};

queueMicrotask(() => {
  console.log("queueMicrotask");
});

sendMessage("刘备");
sendMessage("关羽");
sendMessage("曹操");
